// 使用 express 来做服务
const express = require("express");
// 用于处理跨域的包
const cors = require("cors");
const mysql = require("mysql");
const path = require("path");

// **** 注意，nodejs 做服务端的项目，一定要用一个工具来弄成守护进程启动，
// 可以在服务器上安装 pm2 这个工具来运行，控制起来比较容易一些。

const app = express();
// 服务端的端口，对外网站一般都是 80 端口，这样访问网址就不用带端口号了。
const port = 3000;

// mysql 的连接配置，上线时要改成服务器端的配置
const connection = mysql.createConnection({
  host: "localhost",
  user: "zhaoliang",
  password: "123456",
  database: "demo",
  port: 3306,
});

// 连接 mysql，connect 里面的函数可要可不要。
connection.connect((err) => {
  if (err) {
    console.log("error connecting: " + err.stack);
    return;
  }
  console.log("connected as id " + connection.threadId);
});

// 跨域配置
app.use(cors());
// 可以接收和返回 json 格式
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 挂载静态页面，根据实际情况配置，第一个参数是路由
app.use("/", express.static(path.resolve(__dirname, "..", "public")));
// 可以有多个静态页的配置，可以具体到某一个 html 文件
// app.use("/abc", express.static(path.resolve(__dirname, "..", "public", "abc.html")));

// post 请求，第一个参数是路由，用于静态页中的 ajax 请求，可以查看 index.js 文件
app.post("/get-list", (req, res) => {
  // 收到请求后
  // ... 逻辑处理

  // 执行 sql 语句，因为 mysql 的接口都是回调函数形式的，你可以改成 promise，await async 的形式处理起来比较方便
  connection.query("SELECT 1 + 1 AS solution", function (err, rows, fields) {
    if (err) throw err;
    // 返回接口结果
    res.send({
      code: 200,
      message: "ok",
      data: rows,
    });
  });
});

// 开启后端服务，一般这样执行：node ./server/app.js，记得使用 pm2 来执行这个命令
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
